using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using Common;
using Microsoft.ApplicationBlocks.Data;
using DataAccess;
using SystemFrameworks;

namespace BusinessRules
{
	/// <summary>
	/// Clase de acceso a datos para la entidad MOD_TIPOS_RESPUESTAS
	/// </summary>
	public class TipoRespuesta : SINIC
	{
		#region Private Data Access Atributes

		private const String RES_ID_PARAM = "@RES_ID";
		private const String RES_NOMBRE_PARAM = "@RES_NOMBRE";
		private const String RES_NUMERO_RESPUESTAS_PARAM = "@RES_NUMERO_RESPUESTAS";
		private const String RES_OMISION_PARAM = "@RES_OMISION";
		private const String ARE_ID_PARAM = "@ARE_ID";
		private const String SEC_ID_PARAM = "@SEC_ID";
		private const String RES_TIPO_PARAM = "@RES_TIPO";
		private const String RES_PADRE_ID_PARAM = "@RES_PADRE_ID";
		private const String RES_REUTILIZABLE_PARAM = "@RES_REUTILIZABLE";
		public int RES_ID =0;
		#endregion Private Data Access Atributes

		/// <summary>
		/// Constructor de la clase MODTipoRespuesta
		/// </summary>
        public TipoRespuesta(string strCadenaConecxion)
		{
            CadenaConexion = strCadenaConecxion;
		}

        private string _CadenaConexion;

        public string CadenaConexion
        {
            get { return _CadenaConexion; }
            set { _CadenaConexion = value; }
        }
		#region metodos publicos
		public TipoRespuestaData BuscarTipoRespuesta()
		{
			TipoRespuestaData response = new TipoRespuestaData();
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_MOD_TIPOS_RESPUESTAS", response);
			if (response.Rows.Count == 0)
				return null;
			return response;
		}


		public TipoRespuestaData BuscarTipoRespuesta(decimal PAR_RES_ID_PARAM)
		{
			TipoRespuestaData response = new TipoRespuestaData();
			SqlParameter param1 = new SqlParameter(RES_ID_PARAM, PAR_RES_ID_PARAM);
			SqlParameter[] parameters = {param1};
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_TIPOS_RESPUESTAS", response, parameters);
			if (response.Rows.Count == 0)
				return null;
			return response;
		}



		/// <summary>
		/// Funcion que trae todos los tipos de respuesta
		/// </summary>
		/// <returns></returns>
//		public TipoRespuestaData BuscarTipoRespuestaSeccion()
//		{
//			TipoRespuestaData response = new TipoRespuestaData();
//			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_MOD_TIPOS_RESPUESTAS_SECCIONES", response );
//			if (response.Rows.Count == 0)
//			{
//				return null;
//			}
//			return response;
//		}
//
		public TipoRespuestaData BuscarTipoRespuestaSeccion(decimal decSecId, int intTipo, string strNombre)
		{
			TipoRespuestaData response = new TipoRespuestaData();
			SqlParameter param1 = new SqlParameter(SEC_ID_PARAM, decSecId);
			
			SqlParameter param2 = new SqlParameter(RES_TIPO_PARAM, SqlDbType.TinyInt);
			
			if (intTipo == 0)
			{
				param2.Value = DBNull.Value;
			}
			else
			{
				param2.Value = 	intTipo;			
			}
			
			SqlParameter param3 = new SqlParameter(RES_NOMBRE_PARAM, SqlDbType.VarChar);

			if (strNombre==String.Empty)
			{
				param3.Value = DBNull.Value;
			}
			else
			{
				param3.Value = strNombre;
			}

			SqlParameter[] parameters = {param1, param2, param3};
			
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_MOD_TIPOS_RESPUESTAS_SECCIONES", response , parameters);
			
			if (response.Rows.Count == 0)
				return null;
			return response;
		}


		#endregion
//************************************************************************************************
		#region metodos publicos nuevos
		public TipoRespuestaData BuscarTipoRespuestaHijos(decimal PAR_RES_PADRE_ID_PARAM)
		{
			TipoRespuestaData response = new TipoRespuestaData();
			SqlParameter param1 = new SqlParameter(RES_PADRE_ID_PARAM, PAR_RES_PADRE_ID_PARAM);
			SqlParameter[] parameters = {param1};
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_TIPOS_RESPUESTAS_HIJOS", response, parameters);
			//			if (response.Rows.Count == 0)
			//				return null;
			return response;
		}
		public TipoRespuestaData BuscarTipoRespuestaSeccion(decimal PAR_ARE_ID, decimal PAR_SEC_ID,int PAR_TIPO )
		{
			TipoRespuestaData response = new TipoRespuestaData();
			
			SqlParameter param1 = new SqlParameter();
			param1.ParameterName = ARE_ID_PARAM ; 
			if ( PAR_ARE_ID == Decimal.MinValue)			
				param1.Value = DBNull.Value; 
			else param1.Value = PAR_ARE_ID ;

			SqlParameter param2 = new SqlParameter();
			param2.ParameterName = SEC_ID_PARAM ; 
			if ( PAR_SEC_ID == Decimal.MinValue)			
				param2.Value = DBNull.Value; 
			else param2.Value = PAR_SEC_ID ;

			SqlParameter param3 = new SqlParameter();
			param3.ParameterName = RES_TIPO_PARAM ; 
			if ( PAR_TIPO == int.MinValue)			
				param3.Value = DBNull.Value; 
			else param3.Value = PAR_TIPO ;
		
			SqlParameter[] parameters = {param1, param2 , param3};
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_MOD_TIPOS_RESPUESTAS_SECCIONES_TIPO", response , parameters);
//			if (response.Rows.Count == 0)
//				return null;
			return response;
		}
		public TipoRespuestaData BuscarTipoRespuestaSeccionReutilizables(decimal PAR_ARE_ID, decimal PAR_SEC_ID,int PAR_TIPO )
		{
			TipoRespuestaData response = new TipoRespuestaData();
			
			SqlParameter param1 = new SqlParameter();
			param1.ParameterName = ARE_ID_PARAM ; 
			if ( PAR_ARE_ID == Decimal.MinValue)			
				param1.Value = DBNull.Value; 
			else param1.Value = PAR_ARE_ID ;

			SqlParameter param2 = new SqlParameter();
			param2.ParameterName = SEC_ID_PARAM ; 
			if ( PAR_SEC_ID == Decimal.MinValue)			
				param2.Value = DBNull.Value; 
			else param2.Value = PAR_SEC_ID ;

			SqlParameter param3 = new SqlParameter();
			param3.ParameterName = RES_TIPO_PARAM ; 
			if ( PAR_TIPO == int.MinValue)			
				param3.Value = DBNull.Value; 
			else param3.Value = PAR_TIPO ;
		
			SqlParameter[] parameters = {param1, param2 , param3};
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_MOD_TIPOS_RESPUESTAS_SECCIONES_TIPO_REUTILIZABLES", response , parameters);
			//			if (response.Rows.Count == 0)
			//				return null;
			return response;
		}
		public bool Adicionar(TipoRespuestaData datos, params SqlTransaction[] transaction)
		{
			bool response = false;

			if (datos != null)
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(RES_ID_PARAM, SqlDbType.Decimal);
					param1.Direction = ParameterDirection.Output;
					SqlParameter param2 = new SqlParameter(RES_NOMBRE_PARAM, row[TipoRespuestaData.RES_NOMBRE_FIELD]);
					SqlParameter param3 = new SqlParameter(RES_NUMERO_RESPUESTAS_PARAM, row[TipoRespuestaData.RES_NUMERO_RESPUESTAS_FIELD]);
					SqlParameter param4 = new SqlParameter(RES_OMISION_PARAM, row[TipoRespuestaData.RES_OMISION_FIELD]);
					SqlParameter param5 = new SqlParameter(ARE_ID_PARAM, row[TipoRespuestaData.ARE_ID_FIELD]);
					SqlParameter param6 = new SqlParameter(SEC_ID_PARAM, row[TipoRespuestaData.SEC_ID_FIELD]);
					SqlParameter param7 = new SqlParameter(RES_TIPO_PARAM, row[TipoRespuestaData.RES_TIPO_FIELD]);
					SqlParameter param8 = new SqlParameter(RES_PADRE_ID_PARAM, row[TipoRespuestaData.RES_PADRE_ID_FIELD]);
					SqlParameter param9 = new SqlParameter(RES_REUTILIZABLE_PARAM, row[TipoRespuestaData.RES_REUTILIZABLE_FIELD]);
					SqlParameter[] parameters = {param1, param2, param3, param4, param5, param6 , param7 , param8 , param9 };

					try
					{
						if (transaction.Length > 0)
						{
							SqlHelper.ExecuteNonQuery(transaction[0], CommandType.StoredProcedure, "PAS_ADICIONAR_MOD_TIPOS_RESPUESTAS", parameters);
							if ( param7.Value.ToString() == "2" )//tipo multiple a pregunta unica se crea por dfecto la respuesta otra
							{
								ValorTipoRespuesta valorTipoRespuesta = new ValorTipoRespuesta(CadenaConexion);
								ValorTipoRespuestaData valorTipoRespuestaData = new ValorTipoRespuestaData();
								DataRow rowValor = valorTipoRespuestaData.NewRow();
								rowValor[ValorTipoRespuestaData.VAL_TIP_ID_FIELD] = 1;
								rowValor[ValorTipoRespuestaData.VAL_VALOR_RESPUESTA_FIELD] = "Otro";								
								rowValor[ValorTipoRespuestaData.RES_ID_FIELD] = Convert.ToInt32( param1.Value) ;
								rowValor[ValorTipoRespuestaData.VAL_OTRO_FIELD] = "S";
								valorTipoRespuestaData.Rows.Add(rowValor);
								valorTipoRespuesta.Adicionar( valorTipoRespuestaData, transaction);
							}
						}
						else
						{
							SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_MOD_TIPOS_RESPUESTAS", parameters);
						}
						row[TipoRespuestaData.RES_ID_FIELD] = Convert.ToInt32( param1.Value);
						response = true;
					}
					catch (SqlException sqlEx)
					{
						throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_MOD_TIPOS_RESPUESTAS"), sqlEx);
					}
					catch (Exception ex)
					{
						throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", GetType().FullName), ex);
					}
				}
			}
			return response;
		}

		public string Adicionar(DataRow row, params SqlTransaction[] transaction)
		{
			string response = string.Empty;

			if (row != null)
			{
					SqlParameter param1 = new SqlParameter(RES_ID_PARAM, SqlDbType.Decimal);
					param1.Direction = ParameterDirection.Output;
					SqlParameter param2 = new SqlParameter(RES_NOMBRE_PARAM, row[TipoRespuestaData.RES_NOMBRE_FIELD]);
					SqlParameter param3 = new SqlParameter(RES_NUMERO_RESPUESTAS_PARAM, row[TipoRespuestaData.RES_NUMERO_RESPUESTAS_FIELD]);
					SqlParameter param4 = new SqlParameter(RES_OMISION_PARAM, row[TipoRespuestaData.RES_OMISION_FIELD]);
					SqlParameter param5 = new SqlParameter(ARE_ID_PARAM, row[TipoRespuestaData.ARE_ID_FIELD]);
					SqlParameter param6 = new SqlParameter(SEC_ID_PARAM, row[TipoRespuestaData.SEC_ID_FIELD]);
					SqlParameter param7 = new SqlParameter(RES_TIPO_PARAM, row[TipoRespuestaData.RES_TIPO_FIELD]);
					SqlParameter param8 = new SqlParameter(RES_PADRE_ID_PARAM, row[TipoRespuestaData.RES_PADRE_ID_FIELD]);
					SqlParameter param9 = new SqlParameter(RES_REUTILIZABLE_PARAM, row[TipoRespuestaData.RES_REUTILIZABLE_FIELD]);
					SqlParameter[] parameters = {param1, param2, param3, param4, param5, param6 , param7 , param8 , param9 };

					try
					{
						if (transaction.Length > 0)
						{
							SqlHelper.ExecuteNonQuery(transaction[0], CommandType.StoredProcedure, "PAS_ADICIONAR_MOD_TIPOS_RESPUESTAS", parameters);
							if ( param7.Value.ToString() == "2" )//tipo multiple a pregunta unica se crea por dfecto la respuesta otra
							{
								ValorTipoRespuesta valorTipoRespuesta = new ValorTipoRespuesta(CadenaConexion);
								ValorTipoRespuestaData valorTipoRespuestaData = new ValorTipoRespuestaData();
								DataRow rowValor = valorTipoRespuestaData.NewRow();
								rowValor[ValorTipoRespuestaData.VAL_TIP_ID_FIELD] = 1;
								rowValor[ValorTipoRespuestaData.VAL_VALOR_RESPUESTA_FIELD] = "Otro";								
								rowValor[ValorTipoRespuestaData.RES_ID_FIELD] = Convert.ToInt32( param1.Value) ;
								rowValor[ValorTipoRespuestaData.VAL_OTRO_FIELD] = "S";
								valorTipoRespuestaData.Rows.Add(rowValor);
								valorTipoRespuesta.Adicionar( valorTipoRespuestaData, transaction);
							}
						}
						else
						{
							SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_MOD_TIPOS_RESPUESTAS", parameters);
						}						
						response = param1.Value.ToString() ;
					}
					catch (SqlException sqlEx)
					{
						throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_MOD_TIPOS_RESPUESTAS"), sqlEx);
					}
					catch (Exception ex)
					{
						throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", GetType().FullName), ex);
					}
				}
			return response;
		}

		public bool Actualizar(TipoRespuestaData datos, params SqlTransaction[] transaction)
		{
			bool response = false;
			if (datos != null)
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(RES_ID_PARAM, row[TipoRespuestaData.RES_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(RES_NOMBRE_PARAM, row[TipoRespuestaData.RES_NOMBRE_FIELD]);
					SqlParameter param3 = new SqlParameter(RES_NUMERO_RESPUESTAS_PARAM, row[TipoRespuestaData.RES_NUMERO_RESPUESTAS_FIELD]);
					SqlParameter param4 = new SqlParameter(RES_OMISION_PARAM, row[TipoRespuestaData.RES_OMISION_FIELD]);
					SqlParameter param5 = new SqlParameter(ARE_ID_PARAM, row[TipoRespuestaData.ARE_ID_FIELD]);
					SqlParameter param6 = new SqlParameter(SEC_ID_PARAM, row[TipoRespuestaData.SEC_ID_FIELD]);
					SqlParameter[] parameters = {param1, param2, param3, param4, param5, param6};
					try
					{
						if (transaction.Length > 0)
						{
							SqlHelper.ExecuteNonQuery(transaction[0], CommandType.StoredProcedure, "PAS_ACTUALIZAR_MOD_TIPOS_RESPUESTAS", parameters);
						}
						else
						{
							SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ACTUALIZAR_MOD_TIPOS_RESPUESTAS", parameters);
						}
						response = true;
					}
					catch (SqlException sqlEx)
					{
						throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ACTUALIZAR_MOD_TIPOS_RESPUESTAS"), sqlEx);
					}
					catch (Exception ex)
					{
						throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", GetType().FullName), ex);
					}
				}
			}
			return response;
		}

		public bool Eliminar(TipoRespuestaData datos, params SqlTransaction[] transaction)
		{
			bool response = false;
			if (datos != null)
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(RES_ID_PARAM, row[TipoRespuestaData.RES_ID_FIELD]);

					SqlParameter[] parameters = {param1};
					try
					{
						if (transaction.Length > 0)
						{
							SqlHelper.ExecuteNonQuery(transaction[0], CommandType.StoredProcedure, "PAS_ELIMINAR_MOD_TIPOS_RESPUESTAS", parameters);
						}
						else
						{
							SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_MOD_TIPOS_RESPUESTAS", parameters);
						}
						response = true;
					}
					catch (SqlException sqlEx)
					{
						throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_MOD_TIPOS_RESPUESTAS"), sqlEx);
					}
					catch (Exception ex)
					{
						throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", GetType().FullName), ex);
					}
				}
			}
			return response;
		}

		public bool EjecutarCambios(TipoRespuestaData datos, out string mensaje)
		{
			mensaje = String.Empty;
			bool response = false;
			bool responseAdd = false;
			bool responseDelete = false;
			bool responseUpdate = false;
			TipoRespuestaData dataAdicionar = new TipoRespuestaData();
			TipoRespuestaData dataEliminar = new TipoRespuestaData();
			TipoRespuestaData dataActualizar = new TipoRespuestaData();

			if (datos != null && datos.Rows.Count > 0)
			{
				foreach (DataRow row in datos.Rows)
				{
					switch (row.RowState)
					{
						case DataRowState.Added:
							dataAdicionar.ImportRow(row);
							break;
						case DataRowState.Modified:
							dataActualizar.ImportRow(row);
							break;
						case DataRowState.Deleted:
							DataRow dataRow = dataEliminar.NewRow();
							dataRow[TipoRespuestaData.RES_ID_FIELD] = row[TipoRespuestaData.RES_ID_FIELD, DataRowVersion.Original];
							
							dataEliminar.addTiposRespuestas(dataRow);
							break;
					}
				}
			}

			SqlConnection conexion = new SqlConnection(ConnectionString);
			conexion.Open();
			SqlTransaction transaccion = conexion.BeginTransaction();

			try
			{
				if (dataAdicionar != null && dataAdicionar.Rows.Count > 0)
				{				
					responseAdd = Adicionar(dataAdicionar, transaccion);
				}
				if (dataActualizar != null && dataActualizar.Rows.Count > 0)
				{				
					responseUpdate = Actualizar(dataActualizar, transaccion);
				}
				if (dataEliminar != null && dataEliminar.Rows.Count > 0)
				{					
					responseDelete = Eliminar(dataEliminar, transaccion);
				}
				transaccion.Commit();
			}
			catch (Exception ex)
			{
				transaccion.Rollback();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgCambiosNoExitoso", GetType().FullName), ex);
			}
			finally
			{
				if (conexion != null)
				{
					conexion.Close();
				}
				if (transaccion != null)
				{
					transaccion.Dispose();
				}
				if (conexion != null)
				{
					conexion.Dispose();
				}
			}
			if (responseAdd || responseDelete || responseUpdate)
			{
				response = true;
			}
			mensaje = Mensaje;
			return response;
		}		

		public bool EjecutarCambios(TipoRespuestaData datos, ValorTipoRespuestaData  valorTipoRespuestaData , 
			TipoRespuestaData datosPreguntas ,out string mensaje)
		{
			mensaje = String.Empty;
			bool response = false;
			bool responseAdd = false;
			bool responseDelete = false;
			bool responseUpdate = false;
			TipoRespuestaData dataAdicionar = new TipoRespuestaData();
			TipoRespuestaData dataEliminar = new TipoRespuestaData();
			TipoRespuestaData dataActualizar = new TipoRespuestaData();
			ValorTipoRespuesta valorTipoRespuesta = new ValorTipoRespuesta(CadenaConexion);
			
			if (datos != null && datos.Rows.Count > 0)
			{
				foreach (DataRow row in datos.Rows)
				{
					switch (row.RowState)
					{
						case DataRowState.Added:						
							dataAdicionar.ImportRow(row);							
							break;
						case DataRowState.Modified:
							dataActualizar.ImportRow(row);
							break;
						case DataRowState.Deleted:
							DataRow dataRow = dataEliminar.NewRow();
							dataRow[TipoRespuestaData.RES_ID_FIELD] = row[TipoRespuestaData.RES_ID_FIELD, DataRowVersion.Original];
							
							dataEliminar.addTiposRespuestas(dataRow);
							break;
					}
				}
			}

			SqlConnection conexion = new SqlConnection(ConnectionString);
			conexion.Open();
			SqlTransaction transaccion = conexion.BeginTransaction();

			try
			{
				if (dataAdicionar != null && dataAdicionar.Rows.Count > 0)
				{			
					string resId = Adicionar(dataAdicionar.Rows[0] , transaccion);
					
					RES_ID =  Convert.ToInt32( resId )  ;
					foreach (DataRow row1 in valorTipoRespuestaData.Rows)
					{
						row1[ValorTipoRespuestaData.RES_ID_FIELD] = Convert.ToInt32( resId ) ;
					}

					if ( datosPreguntas != null)
					foreach (DataRow row2 in datosPreguntas.Rows)
					{
						row2[TipoRespuestaData.RES_PADRE_ID_FIELD] = Convert.ToInt32( resId ) ;
					}

					responseAdd = 	true;
				}
				if (dataActualizar != null && dataActualizar.Rows.Count > 0)
				{				
					responseUpdate = Actualizar(dataActualizar, transaccion);
					
				}
				if (dataEliminar != null && dataEliminar.Rows.Count > 0)
				{					
					responseDelete = Eliminar(dataEliminar, transaccion);

				}
								
				if ( valorTipoRespuesta.EjecutarCambios(valorTipoRespuestaData, transaccion , out mensaje))
					responseAdd = true;
				if (datosPreguntas !=null)
				{
					EjecutarCambios(datosPreguntas,  transaccion , out mensaje);
				}

				transaccion.Commit();
			}
			catch (Exception ex)
			{
				transaccion.Rollback();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgCambiosNoExitoso", GetType().FullName), ex);
			}
			finally
			{
				if (conexion != null)
				{
					conexion.Close();
				}
				if (transaccion != null)
				{
					transaccion.Dispose();
				}
				if (conexion != null)
				{
					conexion.Dispose();
				}
			}
			if (responseAdd || responseDelete || responseUpdate)
			{
				response = true;
			}
			mensaje = Mensaje;
			return response;
		}		

		public bool EjecutarCambios(TipoRespuestaData datos, SqlTransaction transaccion, out string mensaje)
		{
			mensaje = String.Empty;
			bool response = false;
			bool responseAdd = false;
			bool responseDelete = false;
			bool responseUpdate = false;
			TipoRespuestaData dataAdicionar = new TipoRespuestaData();
			TipoRespuestaData dataEliminar = new TipoRespuestaData();
			TipoRespuestaData dataActualizar = new TipoRespuestaData();

			if (datos != null && datos.Rows.Count > 0)
			{
				foreach (DataRow row in datos.Rows)
				{
					switch (row.RowState)
					{
						case DataRowState.Added:
							dataAdicionar.ImportRow(row);
							break;
						case DataRowState.Modified:
							dataActualizar.ImportRow(row);
							break;
						case DataRowState.Deleted:
							DataRow dataRow = dataEliminar.NewRow();
							dataRow[TipoRespuestaData.RES_ID_FIELD] = row[TipoRespuestaData.RES_ID_FIELD, DataRowVersion.Original];
							
							dataEliminar.addTiposRespuestas(dataRow);
							break;
					}
				}
			}

			try
			{
				if (dataAdicionar != null && dataAdicionar.Rows.Count > 0)
				{				
					responseAdd = Adicionar(dataAdicionar, transaccion);
				}
				if (dataActualizar != null && dataActualizar.Rows.Count > 0)
				{				
					responseUpdate = Actualizar(dataActualizar, transaccion);
				}
				if (dataEliminar != null && dataEliminar.Rows.Count > 0)
				{					
					responseDelete = Eliminar(dataEliminar, transaccion);
				}		
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgCambiosNoExitoso", GetType().FullName), ex);
			}			
			if (responseAdd || responseDelete || responseUpdate)
			{
				response = true;
			}
			mensaje = Mensaje;
			return response;
		}		

		#endregion

	}
}